package edu.uoc.tds.pac4.beansGestors;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import edu.uoc.tds.pac4.DAO.*;
import edu.uoc.tds.pac4.beans.*;
import edu.uoc.tds.pac4.common.GestioEventsException;

public class GestorAuxiliars extends GestorDisc{
	/**
	 * Constructor
	 */
	public GestorAuxiliars()
	{
		super();
	}
	
	private static final long serialVersionUID = 1L;

	/***
	 * Obtenir columnes Pais
	 * @return
	 */
	private String getColumnesPais(){
		return "p.codi_pais as p_codi_pais, p.nom as p_nom ";
	}
	/***
	 * Obtenir pais
	 * @param codi
	 * @return
	 * @throws GestioEventsException 
	 */
	public Pais getPais(String codi) throws GestioEventsException{
		Pais p = new Pais();
		
		Select sel = new Select("MestrePaissos p"," codi_pais = " + this.putString(codi));
		sel.addCamp(this.getColumnesPais());
		
		try {		
			p.buildFromRS(this.llegir(sel));
		} catch (SQLException e) {
			throw new GestioEventsException(GestioEventsException.Error_BD);
		}
		
		return p;
	}
	/***
	 * Obtenir pais
	 * @return
	 * @throws GestioEventsException 
	 */
	public Vector<Pais> getPaissos() throws GestioEventsException{
		Pais p;
		ResultSet rs;
		Vector<Pais> vec=new Vector<Pais>();
		
		Select sel = new Select("MestrePaissos p","");
		sel.addCamp(this.getColumnesPais());
		
		rs=this.llegir(sel);
		if(rs!=null){
			try {
				do{	
					p = new Pais();
					p.buildFromRS(rs);
					vec.add(p);
				}while(rs.next());
				rs.close();
			} catch (SQLException e) {
				throw new GestioEventsException(GestioEventsException.Error_BD);
			}
		}
		return vec;
	}
	/***
	 * Obtenir columnes Pais
	 * @return
	 */
	public String getColumnesLocalitat(){
		return "p.codi_pais as p_codi_pais, p.nom as p_nom, l.codi_localitat as l_codi_localitat, l.nom as l_nom, l.codi_pais as l_codi_pais ";
	}
	/***
	 * Obtenir Localitat
	 * @param codi
	 * @return
	 * @throws GestioEventsException 
	 */
	public Localitat getLocalitat(int codi) throws GestioEventsException{
		Localitat l = new Localitat();
		
		Select sel = new Select("MestreLocalitats l"," codi_localitat = " + codi);
		sel.addLeftJoin("MestrePaissos p", "p.codi_pais = l.codi_pais");
		sel.addCamp(this.getColumnesLocalitat());
		
		try {
			l.buildFromRS(this.llegir(sel));
		} catch (SQLException e) {
			throw new GestioEventsException(GestioEventsException.Error_BD);
		}
		
		return l;
	}
	/***
	 * Obtenir llista de Localitats
	 * @return
	 * @throws GestioEventsException 
	 */
	public Vector<Localitat> getLocalitats(Pais pais) throws GestioEventsException{
		ResultSet rs;
		Localitat l;
		Vector<Localitat> vec = new Vector<Localitat>();
		
		String sqlWhere = "";
		boolean isFirstWhere = true;
		
		if(isFirstWhere) isFirstWhere = false;
		else sqlWhere += " AND";
		sqlWhere += " l.codi_pais = " + this.putString(pais.getCodi());
	
		Select sel = new Select("MestreLocalitats l",sqlWhere);
		sel.addLeftJoin("MestrePaissos p", "p.codi_pais = l.codi_pais");
		sel.addCamp(this.getColumnesLocalitat());

		rs=this.llegir(sel);
		if(rs!=null){
			try {
				do{
					l = new Localitat();
					l.buildFromRS(rs);
					System.out.println(l.getNom());
					vec.add(l);
				}while(rs.next());
				rs.close();
			} catch (SQLException e) {
				throw new GestioEventsException(GestioEventsException.Error_BD);
			}
		}
		
		return vec;
	}
}
